package com.wac.common.component;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @author wuancheng
 * @date 2023/9/12 23:12
 * @description
 */
@Component
public class NacosHelper {
    @Resource
    private Environment environment;

    /**
     * 获取string类型value
     *
     * @param key
     * @return
     */
    public String getString(String key) {
       return getString(key, null);
    }

    /**
     * 获取string类型value，为空返回默认值
     *
     * @param key
     * @param defaultValue 默认值
     * @return
     */
    public String getString(String key, String defaultValue) {
        String value = environment.getProperty(key);
        if (StringUtils.isBlank(value)) {
            return defaultValue;
        }
        return value;
    }

    /**
     * 获取Integer类型value
     *
     * @param key
     * @return
     */
    public Integer getInteger(String key) {
        return getInteger(key, null);
    }

    /**
     * 获取Integer类型value，为空返回默认值
     *
     * @param key
     * @param defaultValue 默认值
     * @return
     */
    public Integer getInteger(String key, Integer defaultValue) {
        String value = environment.getProperty(key);
        if (StringUtils.isBlank(value)) {
            return defaultValue;
        }
        return Integer.valueOf(value);
    }


    /**
     * 获取Long类型value
     *
     * @param key
     * @return
     */
    public Long getLong(String key) {
        return getLong(key, null);
    }

    /**
     * 获取Long类型value，为空返回默认值
     *
     * @param key
     * @param defaultValue 默认值
     * @return
     */
    public Long getLong(String key, Long defaultValue) {
        String value = environment.getProperty(key);
        if (StringUtils.isBlank(value)) {
            return defaultValue;
        }
        return Long.valueOf(value);
    }

    /**
     * 获取List
     *
     * @param key
     * @param clazz list类型
     * @return
     * @param <T>
     */
    public <T> List<T> getList(String key, Class<T> clazz){
        String listStr = getString(key);
        if (StringUtils.isBlank(listStr)) {
            return null;
        }
        List<T> list = JSONObject.parseArray(listStr, clazz);
        return list;
    }

    /**
     * 获取map
     *
     * @param key
     * @return
     */
    public Map<String, Object> getMap(String key) {
        String mapStr = getString(key);
        if (StringUtils.isBlank(mapStr)) {
            return null;
        }
        Map map = JSONObject.parseObject(mapStr, Map.class);
        return map;
    }
}
